package com.joven.shelltest.utils.templatefactory;

/**
 * @author wzj
 * @since 2025/7/4 15:18
 */
public abstract class AbstractDataProcessor {
    // 模板方法，用final修饰，防止子类覆盖算法骨架
    public final void process(String filePath) {
        // 1. 读取数据 (不变)
        String rawData = readFile(filePath);
        // 2. 解析数据 (变化 - 由子类实现)
        Object data = parseData(rawData);
        // 3. 验证数据 (不变)
        validateData(data);
        // 4. 保存数据 (不变)
        saveData(data);
        // 5. 钩子方法 (可选)
        afterProcessHook();
    }

    // --- 基本方法 ---
    private String readFile(String filePath) {
        System.out.println("步骤1: 从路径 " + filePath + " 读取文件...");
        // 模拟读取文件内容
        return "模拟的" + filePath + "内容";
    }

    // 抽象方法，强制子类实现
    protected abstract Object parseData(String rawData);

    private void validateData(Object data) {
        System.out.println("步骤3: 执行通用数据验证逻辑...");
    }

    private void saveData(Object data) {
        System.out.println("步骤4: 将数据保存到数据库...");
    }

    // 钩子方法，子类可以选择性覆盖
    protected void afterProcessHook() {
        // 默认什么都不做
    }
}
